package com.xbongbong.pro.service.toolbox.statistic.help;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.statistic.enums.ResultFromEnum;
import com.xbongbong.pro.statistic.enums.SystemCodeEnum;
import com.xbongbong.pro.statistic.pojo.FiscalYearTimePojo;
import com.xbongbong.pro.statistic.pojo.TimePojo;
import com.xbongbong.pro.statistic.result.pojo.ChartResultBasePojo;
import com.xbongbong.pro.statistic.result.pojo.vo.ResultDataTableVO;
import com.xbongbong.pro.statistic.through.pojo.ResultThroughPojo;
import com.xbongbong.pro.statistic.through.pojo.dto.ResultThroughDTO;
import com.xbongbong.pro.statistic.through.pojo.dto.ThroughDTO;
import com.xbongbong.pro.statistic.through.pojo.vo.ResultThroughVO;

import java.util.List;

/**
 * 穿透增强服务
 *
 * @author LiZhikang
 * @date 2022/11/19 15:52
 */
public interface ThroughProService {

    /**
     * 业务类型
     * @return
     */
    List<Integer> businessType();

    /**
     * 处理穿透后的时间相关参数
     *
     * @param splitFlag          是否切分flag（如筛选年时要切分成月、筛选月要展示成日的，则需要在穿透时处理timeType）
     * @param fiscalYearTimePojo 统计时间参数pojo
     * @param startTime          穿透开始时间
     * @param endTime            穿透结束时间
     * @return com.xbongbong.pro.statistic.pojo.TimePojo
     * @author zcp
     * @date 2019/4/18 22:00
     * @version v1.0
     * @since v1.0
     */
    TimePojo formatThroughTimeInfo(boolean splitFlag, FiscalYearTimePojo fiscalYearTimePojo, Integer startTime, Integer endTime);

    /**
     * 封装表格数据，并处理穿透参数（如果不需要穿透，则不用处理）
     * 不需要穿透，则直接new ResultDataTableVO(value, null)即可
     *
     * @param value      显示内容
     * @param throughDTO 穿透基础参数dto
     * @param timePojo   穿透时间参数pojo
     * @return com.xbongbong.pro.statistic.result.pojo.vo.ResultDataTableVO
     * @author zcp
     * @date 2019/4/19 10:34
     * @version v1.0
     * @since v1.0
     */
    ResultDataTableVO formatResultDataTableVO(String value, ThroughDTO throughDTO, TimePojo timePojo);

    String getThrough(ThroughDTO throughDto, TimePojo timePojo);

    /**
     * 得到穿透参数
     *
     * @param throughDto 穿透基础参数dto
     * @param timePojo   穿透时间参数pojo
     * @param sourcePage 穿透来源页
     * @return java.lang.String
     * @author zcp
     * @date 2019/4/24 14:56
     * @version v1.0
     * @since v1.0
     */
    String getThrough(ThroughDTO throughDto, TimePojo timePojo, String sourcePage);

    /**
     * 判断是否时移动端产品销量，如果是，则不穿透
     *
     * @param chartResultBasePojo 参数pojo
     * @param systemCodeEnum      系统指标枚举
     * @return boolean true 可以穿透，false不可以穿透
     * @author zcp
     * @date 2019/5/20 17:40
     * @version v1.0
     * @since v1.0
     */
    boolean checkThrough(ChartResultBasePojo chartResultBasePojo, SystemCodeEnum systemCodeEnum);

    /**
     * 获取穿透结果list
     *
     * @param resultFromEnum    统计请求来源枚举
     * @param systemCodeEnum    系统指标枚举
     * @param resultThroughPojo 穿透参数pojo
     * @param resultThroughDTO  穿透DTO
     * @return com.xbongbong.pro.statistic.through.pojo.vo.ResultThroughVO
     * @throws XbbException error
     * @author zcp
     * @date 2019/4/30 11:18
     * @version v1.0
     * @since v1.0
     */
    ResultThroughVO getThroughList(ResultFromEnum resultFromEnum, SystemCodeEnum systemCodeEnum, ResultThroughPojo resultThroughPojo, ResultThroughDTO resultThroughDTO) throws XbbException;

    /**
     * 格式化list，转换为穿透后的标题和数据，塞入resultThroughVo内
     * @param resultFromEnum 统计请求来源枚举
     * @param resultThroughPojo 穿透参数pojo
     * @param openRule 合同业绩分配是否开启
     * @param systemCodeEnum 系统指标枚举
     * @param list 业务list
     * @param resultThroughVo 穿透返回vo
     * @param resultThroughDTO 穿透DTO
     * @return com.xbongbong.pro.statistic.through.pojo.vo.ResultThroughVO
     * @throws XbbException
     * @author zcp
     * @date 2019/4/30 20:32
     * @since v1.0
     * @version v1.0
     */
    ResultThroughVO formatList(ResultFromEnum resultFromEnum, ResultThroughPojo resultThroughPojo, boolean openRule, SystemCodeEnum systemCodeEnum, List list, ResultThroughVO resultThroughVo, ResultThroughDTO resultThroughDTO) throws XbbException;


}
